package com.rambler.api.common.vo.qweather.enums;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 和风天气错误码枚举（V2）
 * 按 HTTP 状态码分类并提供详细说明
 */
@Getter
@RequiredArgsConstructor
public enum QWeatherResponseCodeEnum {

    // 400 错误请求类
    INVALID_PARAMETER("400", "Invalid Parameter", "参数错误，请检查请求参数。"),
    MISSING_PARAMETER("400", "Missing Parameter", "缺少必要参数，请检查请求参数。"),
    NOT_FOUND("400", "Not Found", "未找到所查询的数据。"),
    DATA_NOT_AVAILABLE("400", "Data Not Available", "数据暂时不可用，可能不支持该地区。"),

    // 401 身份验证失败
    UNAUTHORIZED("401", "Unauthorized", "身份认证失败，请检查你的 Key 或 Token。"),

    // 403 权限/额度问题
    NO_CREDIT("403", "No Credit", "账户无可用额度，请充值或购买额度。"),
    OVERDUE("403", "Overdue", "账户存在逾期账单，请先支付后再请求。"),
    SECURITY_RESTRICTION("403", "Security Restriction", "请求违反了请求限制，请检查限制设置或是否被泄露。"),
    INVALID_HOST("403", "Invalid Host", "API Host 错误，请检查控制台设置。"),
    ACCOUNT_SUSPENSION("403", "Account Suspension", "账号被冻结，请联系客服。"),
    FORBIDDEN("403", "Forbidden", "无权限请求该数据，建议提交工单咨询。"),

    // 404 路径错误
    RESOURCE_NOT_FOUND("404", "Not Found", "资源不存在，路径或参数错误。"),

    // 429 请求频率/额度限制
    TOO_MANY_REQUESTS("429", "Too Many Requests", "请求过多，已超过频率限制。"),
    OVER_FREE_DAILY_LIMIT("429", "Over Free Daily Limit", "超出每日免费请求次数，请明日重试。"),
    OVER_MONTHLY_LIMIT("429", "Over Monthly Limit", "超出月度请求限制，请等待或升级套餐。"),

    // 500 服务端错误
    UNKNOWN_ERROR("500", "Unknown Error", "服务器发生未知错误，请提交工单联系支持。");

    private final String code;
    private final String title;
    private final String message;

    /**
     * 根据 code 获取枚举
     */
    @JsonCreator
    public static QWeatherResponseCodeEnum fromCode(String code) {
        for (QWeatherResponseCodeEnum error : values()) {
            if (error.code.equals(code)) {
                return error;
            }
        }
        return UNKNOWN_ERROR;
    }
}
